home *** CD-ROM | disk | FTP | other *** search
/ Aminet 37 / Aminet 37 (2000)(Schatztruhe)[!][Jun 2000].iso / Aminet / dev / e / MCesrc.lha / MagnumChat.e < prev    next >
Text File  |  1998-02-28  |  30KB  |  1,996 lines

  1.  
  2. ->   SCAPE  -  Code MAXsBBS Doors in Amiga E!!!
  3. ->   Copyright © Chris Hearn */
  4. ->   mAGNUM cHAT! tHE bEST cHAT dOOR fOR mAXSBBS!
  5. ->   All Code is Copyright ©1997 Chris Hearn
  6.  
  7. MODULE 'exec/tasks',
  8.        'exec/ports',
  9.        'exec/nodes',
  10.        'exec/lists',
  11.        'exec/types',
  12.        'amigalib/ports',
  13.        'dos/dos',
  14.        'afc/reqtooller',
  15.        'other/stayrandom'
  16.  
  17. CONST LINELENGTH=1000
  18.  
  19. OBJECT doormsg
  20.   door_msg:mn,
  21.   command:INT,
  22.   data:INT,
  23.   string[80]:ARRAY OF CHAR,
  24.   carrier:INT
  25. ENDOBJECT
  26.  
  27. -> PROC main() is simply the startup code... write your door in
  28. -> PROC theDoor()
  29.  
  30. -> These are all neaded by the startup code
  31. DEF msgportname[12]:STRING, msgportname2[10]:STRING, mport=NIL:PTR TO mp,
  32.     ourtask,cport=NIL:PTR TO mp, lost_carrier=0, wherefrom:PTR TO CHAR,
  33.     p1:doormsg,chattype, xpos1, xpos2, ypos1, ypos2, freeze, key, wordtwo[80]:STRING,
  34.     cleartype, time[20]:STRING, realtime[20]:STRING, bump, macroword[80]:STRING, spaceflag,
  35.     username[80]:STRING
  36.  
  37. ->  ####################
  38. ->  WRITE YOUR DOOR HERE
  39. ->  ####################
  40.  
  41. PROC theDoor()
  42.  
  43.   -> E-Strings for input and output...
  44.   DEF n=0, space, t, space2, word[80]:STRING, chrt[30]:STRING,
  45.       length, length2, chrt2[30]:STRING, confline[100]:STRING,rawulpath[200]:STRING,ntwo,
  46.       city[30]:STRING, mins, length3, insert, timeleft, timenow,
  47.       write, lastuser, ret, rt=NIL:PTR TO reqtooller, esc,
  48.       filename, autolen, s:PTR TO CHAR, timestr[18]:STRING, time123[18]:STRING, line, stat,
  49.       buf[LINELENGTH]:ARRAY, sqbrack, fh, last=NIL, k, first=NIL, auto[50]:STRING, i, strung[20]:ARRAY OF LONG
  50.  
  51. NEW rt.reqtooller()
  52.  
  53. /*
  54. IF fh:=Open('DOORS:mAGNUMcHAT/macros.cfg',OLDFILE)
  55.     WHILE Fgets(fh,buf,LINELENGTH)
  56.         IF (k:=String(StrLen(buf)))=NIL THEN Raise("MEM")
  57.         StrCopy(k,buf,ALL)
  58.         IF last THEN Link(last,k) ELSE first:=k
  59.         last:=k
  60.         INC n
  61.     ENDWHILE
  62.     Close(fh)
  63.     s:=first
  64. ELSE
  65. mxCls()
  66. mxColour(3,0)
  67. mxCentre(4,'Can\at find macro config file :(')
  68. mxGotoXY(1,1)
  69. mxHotKey()
  70. RETURN
  71. ENDIF
  72.  
  73.  
  74.  
  75. n:=1
  76.  
  77. IF fh:=Open('DOORS:mAGNUMcHAT/macros.cfg',OLDFILE)
  78.     WHILE Fgets(fh,buf,LINELENGTH)
  79.     IF (k:=String(StrLen(buf)))=NIL THEN Raise("MEM")
  80.     StrCopy(k,buf,ALL)
  81.     IF last THEN Link(last,s) ELSE first:=s
  82.     last:=s
  83.     INC n
  84.     ENDWHILE
  85.     Close(fh)
  86. ELSE
  87. mxCls()
  88. mxColour(3,0)
  89. mxCentre(4,'Can\at find macro config file :(')
  90. mxGotoXY(1,1)
  91. mxHotKey()
  92. RETURN
  93. ENDIF
  94. */
  95.  
  96. mxGetStrInfo(1,username)
  97. mxGetStrInfo(3,city)
  98.  
  99. spaceflag:=1
  100. write:=0
  101. mxColour(7,0)
  102. line:=1
  103. stat:=0
  104.  
  105. Execute('Echo "0" >ENV:Chatting',0,0)
  106.  
  107. StrCopy(rawulpath,(confreadstr(1)),ALL)
  108. cleartype:=confreadvalue(3)
  109. chattype:=confreadvalue(2)
  110.  
  111. /*
  112. REPEAT
  113. StrCopy(autostr[line],(confreadauto(line)))
  114. IF (StrCmp(autostr[line],'#',ALL))=TRUE THEN stat:=1
  115. line:=line+1
  116. UNTIL stat=1
  117. */
  118.  
  119. begin:
  120.  
  121. xpos1:=1
  122. xpos2:=1
  123. ypos1:=2
  124. ypos2:=14
  125. lastuser:=0
  126.  
  127. mxCls()
  128.  
  129. newchattype:
  130.  
  131. IF chattype=0
  132. stayrandom()
  133. rand:
  134. chattype:=Rnd(7)
  135. IF chattype=0 THEN JUMP rand
  136. ENDIF
  137.  
  138. IF chattype=1
  139. mxGotoXY(1,1)
  140. mxColour(1,0)
  141. mxPrint('µ¸¤þ©­®.¡­ð𵸮®µþ¡®¤­©¤¤°¡©þ¡¤.þµ×®jßפ©¤°¤¸¤¸©±©×þ°¢½.®¼×¤¾¾±½¤©±¤±¼¸©¸±¼©þ   ')
  142. mxColour(3,0)
  143. mxGotoXY(2,1)
  144. mxPrintLine(0)
  145. mxGotoXY(50,1)
  146. mxPrint(' mAGNUM cHAT bY sTONEcOLD ')
  147. mxGotoXY(1,13)
  148. mxColour(1,0)
  149. mxPrint('%6£¤¤¸þ©¤¾,þçø®¤°¸½,·¡¤©æþ½®,µþ¾®¸±¤,¤©¸þ­­¤­þ宩­þ©®¤©©¤©­¤®¤©¤©æ¤¤¤©¤¤©®þ®ø   ')
  150. mxColour(3,0)
  151. mxGotoXY(1,13)
  152. mxPrint(' Chatting to ')
  153. mxGotoXY(50,13)
  154. mxPrint(' Time Remaining: %k mins ')
  155. mxGotoXY(1,25)
  156. mxColour(1,0)
  157. mxPrint('þþµ¸ßµß®¸µß¼©µ¸¢µ¸¢®µ,¢®µ,®,µß®µ,©¢µ,µ©µ¼©¸µ©¼µ¸©µ©¸¾¸³¾¸¢¾©¸±¼±¾¸©¼¾©¸¼¾¸©¾©Å  ')
  158. mxGotoXY(3,25)
  159. mxColour(3,0)
  160. mxPrint(' dEL/cTRL n - cLEAR sCREEN ')
  161. mxGotoXY(32,25)
  162. mxPrint(' cTRL Z - qUICK lOGoFF ')
  163. mxGotoXY(60,25)
  164. mxPrint(' cTRL Q - qUIT ')
  165. mxGotoXY(14,13)
  166. mxPrint(username)
  167. mxGotoXY(1,2)
  168. ENDIF
  169.  
  170. IF chattype=2
  171. mxGotoXY(1,1)
  172. mxColour(4,0)
  173. mxPrint('------------------------------------------------------------------------------')
  174. mxColour(6,0)
  175. mxGotoXY(2,1)
  176. mxPrintLine(0)
  177. mxGotoXY(54,1)
  178. mxPrint('mAGNUM cHAT bY sTONEcOLD')
  179. mxGotoXY(1,13)
  180. mxColour(6,0)
  181. mxPrint(' Chatting to')
  182. mxGotoXY(14,13)
  183. mxColour(4,0)
  184. mxPrint('-----------------------------------------------------------------')
  185. mxGotoXY(52,13)
  186. mxColour(6,0)
  187. mxPrint('Time Remaining: %k mins')
  188. mxGotoXY(1,25)
  189. mxPrint('  dEL/cTRL-n - cLEAR sCREEN       cTRL-z - qUICK lOGOFF       cTRL-q  - qUIT   ')
  190. mxColour(6,0)
  191. mxGotoXY(14,13)
  192. mxPrint(username)
  193. mxGotoXY(1,2)
  194. ENDIF
  195.  
  196. IF chattype=3
  197. mxStyle(1)
  198. mxGotoXY(1,1)
  199. mxColour(7,4)
  200. mxPrint('                                                                              ')
  201. mxGotoXY(3,1)
  202. mxPrintLine(0)
  203. mxGotoXY(54,1)
  204. mxColour(6,4)
  205. mxPrint('mAGNUM cHAT bY sTONEcOLD')
  206. mxGotoXY(1,13)
  207. mxPrint('                                                                              ')
  208. mxGotoXY(3,13)
  209. mxColour(7,4)
  210. mxPrint(username)
  211. mxGotoXY(1,25)
  212. mxColour(6,4)
  213. mxPrint('-----<        >---<         >---<[DEL/Ctrl N] Clear Window(s) [Ctrl Q] Quit >-')
  214. mxColour(3,4)
  215. mxGotoXY(40,13)
  216. mxPrint(city)
  217. mxPrint(' - ')
  218. mxPrint('%w')
  219. mxStyle(0)
  220. chattype1()
  221. ENDIF
  222.  
  223. IF chattype=4
  224. mxStyle(1)
  225. mxGotoXY(1,1)
  226. mxColour(7,4)
  227. mxPrint('                                                                             ')
  228. mxGotoXY(3,1)
  229. mxPrintLine(0)
  230. mxGotoXY(54,1)
  231. mxColour(6,4)
  232. mxPrint('mAGNUM cHAT bY sTONEcOLD')
  233. mxGotoXY(1,25)
  234. mxPrint('                                                                              ')
  235. mxGotoXY(4,25)
  236. mxColour(7,4)
  237. mxPrint(username)
  238. mxGotoXY(1,13)
  239. mxColour(1,4)
  240. mxPrint('-----<        >---<         >---<[DEL/Ctrl N] Clear Window(s) [Ctrl Q] Quit >-')
  241. mxColour(3,4)
  242. mxGotoXY(40,25)
  243. mxPrint(city)
  244. mxPrint(' - ')
  245. mxPrint('%w')
  246. mxStyle(0)
  247. chattype1()
  248. ENDIF
  249.  
  250. IF chattype=5
  251. mxGotoXY(1,1)
  252. mxColour(4,0)
  253. mxPrint('ÄÄÄ[     ]ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ')
  254. mxColour(6,0)
  255. mxGotoXY(5,1)
  256. mxPrint('Sysop')
  257. mxColour(4,0)
  258. mxGotoXY(1,13)
  259. mxPrint('ÄÄÄ[ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ')
  260. mxColour(6,0)
  261. mxGotoXY(5,13)
  262. mxPrint(username)
  263. length:=StrLen(username)
  264. mxColour(4,0)
  265. mxGotoXY(length+5,13)
  266. mxPrint(']')
  267. mxGotoXY(1,25)
  268. mxPrint('ÄÄÄ[ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ]ÄÄÄÄÄÄÄÄÄÄÄ[ÄÄÄÄÄÄÄÄÄÄÄÄÄÄ]ÄÄÄÄÄÄÄÄÄÄÄ')
  269. mxGotoXY(5,25)
  270. mxColour(6,0)
  271. mxPrint('mAGNUM cHAT v1.15 - SplitScreen Chat')
  272. mxGotoXY(54,25)
  273. mxColour(2,0)
  274. mxPrint('Ctrl-Q to quit')
  275. ENDIF
  276.  
  277.  
  278. IF chattype=6
  279. chatsix()
  280. ENDIF
  281.  
  282.  
  283. mxGetStrInfo(10,realtime)
  284. mxSetPageFlag(0)
  285. mxGetStrInfo(10,time123)
  286. mxColour(7,0)
  287.  
  288.  
  289. IF(lastuser=0)
  290. mxGotoXY(xpos1,ypos1)
  291. ELSE
  292. mxGotoXY(xpos2,ypos2)
  293. ENDIF
  294.  
  295. LOOP
  296.  
  297.  
  298. /*
  299.  
  300. -> This is the mxNoWaitHotKey() system...
  301.  
  302. REPEAT
  303. key:=mxNoWaitHotKey()
  304. IF(lost_carrier=1) THEN RETURN
  305. mxGetStrInfo(10,timestr)
  306. IF(StrCmp(timestr,time123,ALL)=FALSE)
  307. IF(lost_carrier=1) THEN RETURN
  308. chattype1()
  309. mxGetStrInfo(10,time123)
  310. ENDIF
  311. UNTIL key>0
  312.  
  313. */
  314.  
  315. -> This is the normal mxHotKey() mode...
  316.  
  317. key:=mxHotKey()
  318.  
  319. IF(lost_carrier=1) THEN RETURN
  320.  
  321.  
  322.  
  323. IF(wherefrom=0)
  324.  
  325.  
  326. SELECT key
  327.  
  328. IF lastuser=1
  329. mxGotoXY(xpos1,ypos1)
  330. ENDIF
  331.  
  332. lastuser:=0
  333.  
  334. CASE 23
  335. IF write=4
  336. write:=0
  337. ELSE
  338. write:=write+1
  339. ENDIF
  340. chattype1()
  341. JUMP lkeypos
  342.  
  343. CASE 10
  344. JUMP lkeypos
  345.  
  346. CASE 9
  347. JUMP lkeypos
  348.  
  349. CASE 3
  350. IF chattype=6
  351. chattype:=1
  352. ELSE
  353. chattype:=chattype+1
  354. ENDIF
  355. JUMP newchattype
  356.  
  357. CASE 14
  358. IF cleartype=0
  359. FOR n:=2 TO 12
  360. mxGotoXY(1,n)
  361. mxPrint('\e[K')
  362. ENDFOR
  363. xpos1:=1
  364. ypos1:=2
  365. FOR n:=14 TO 24
  366. mxGotoXY(1,n)
  367. mxPrint('\e[K')
  368. ENDFOR
  369. xpos2:=1
  370. ypos2:=14
  371. chattype1()
  372. spaceflag:=1
  373. JUMP lkeypos
  374. ENDIF
  375. IF cleartype=1
  376. mxGotoXY(1,14)
  377. FOR t:=1 TO 11
  378. mxPrint('\e[1M')
  379. ENDFOR
  380. mxGotoXY(1,2)
  381. FOR t:=1 TO 11
  382. mxPrint('\e[1M')
  383. ENDFOR
  384. mxGotoXY(1,2)
  385. FOR t:=1 TO 11
  386. mxPrint('\e[1L')
  387. ENDFOR
  388. mxGotoXY(1,14)
  389. FOR t:=1 TO 11
  390. mxPrint('\e[1L')
  391. ENDFOR
  392. xpos1:=1
  393. ypos1:=2
  394. xpos2:=1
  395. ypos2:=14
  396. chattype1()
  397. StrCopy(word,'',ALL)
  398. StrCopy(wordtwo,'',ALL)
  399. spaceflag:=1
  400. JUMP lkeypos
  401. ENDIF
  402.  
  403. CASE 127
  404. IF cleartype=0
  405. FOR n:=2 TO 12
  406. mxGotoXY(1,n)
  407. mxPrint('\e[K')
  408. ENDFOR
  409. xpos1:=1
  410. ypos1:=2
  411. chattype1()
  412. JUMP lkeypos
  413. ENDIF
  414. IF cleartype=1
  415. mxGotoXY(1,2)
  416. FOR t:=1 TO 11
  417. mxPrint('\e[1M')
  418. ENDFOR
  419. mxGotoXY(1,2)
  420. FOR t:=1 TO 11
  421. mxPrint('\e[1L')
  422. ENDFOR
  423. xpos1:=1
  424. ypos1:=2
  425. chattype1()
  426. StrCopy(word,'',ALL)
  427. spaceflag:=1
  428. JUMP lkeypos
  429. ENDIF
  430.  
  431.  
  432. CASE 12
  433. IF cleartype=0
  434. FOR n:=2 TO 12
  435. mxGotoXY(1,n)
  436. mxPrint('\e[K')
  437. ENDFOR
  438. xpos1:=1
  439. ypos1:=2
  440. chattype1()
  441. JUMP lkeypos
  442. ENDIF
  443. IF cleartype=1
  444. mxGotoXY(1,2)
  445. FOR t:=1 TO 11
  446. mxPrint('\e[1M')
  447. ENDFOR
  448. mxGotoXY(1,2)
  449. FOR t:=1 TO 11
  450. mxPrint('\e[1L')
  451. ENDFOR
  452. xpos1:=1
  453. ypos1:=2
  454. chattype1()
  455. StrCopy(word,'',ALL)
  456. spaceflag:=1
  457. JUMP lkeypos
  458. ENDIF
  459.  
  460. CASE 26
  461. mxLogOff()
  462. IF(lost_carrier=1) THEN RETURN
  463.  
  464. CASE 18
  465. mxMenuFunct(23,100,rawulpath)
  466. spaceflag:=1
  467. JUMP begin
  468.  
  469. CASE 8
  470. IF xpos1>1
  471. mxCharbbs(8)
  472. xpos1:=xpos1-1
  473. IF bump=0
  474. bump:=1
  475. ELSE
  476. bump:=0
  477. ENDIF
  478. IF(StrLen(word)=1)
  479. StrCopy(word,'',ALL)
  480. spaceflag:=1
  481. ELSE
  482. length:=(StrLen(word)-1)
  483. StrCopy(word,word,length)
  484. ENDIF
  485. JUMP lkeypos
  486. ENDIF
  487.  
  488.  
  489. CASE 5
  490. IF ypos1>2
  491. ypos1:=ypos1-1
  492. mxPrint('\e[A')
  493. spaceflag:=1
  494. ENDIF
  495.  
  496. CASE 24
  497. IF ypos1>11
  498. JUMP lkeypos
  499. ELSE
  500. ypos1:=ypos1+1
  501. mxPrint('\e[B')
  502. spaceflag:=1
  503. JUMP lkeypos
  504. ENDIF
  505.  
  506.  
  507. CASE 4
  508. IF xpos1=78
  509. JUMP lkeypos
  510. ELSE
  511. mxPrint('\e[C')
  512. xpos1:=xpos1+1
  513. space:=xpos1
  514. StrCopy(word,'',ALL)
  515. spaceflag:=1
  516. JUMP lkeypos
  517. ENDIF
  518.  
  519. CASE 19
  520. IF xpos1>1
  521. xpos1:=xpos1-1
  522. mxPrint('\e[D')
  523. ENDIF
  524.  
  525.  
  526. CASE 20
  527. timeleft:=mxGetIntInfo(7)
  528. freeze:=1
  529.  
  530. IF chattype=0
  531. mxGotoXY(67,13)
  532. mxColour(3,0)
  533. mxPrint('fRoZeN   ')
  534. ENDIF
  535.  
  536. IF chattype=1
  537. mxGotoXY(68,13)
  538. mxColour(6,0)
  539. mxPrint('fRoZeN ')
  540. ENDIF
  541.  
  542. IF chattype=2
  543. mxGotoXY(21,25)
  544. mxColour(7,4)
  545. mxPrint('fRoZeN  ')
  546. ENDIF
  547.  
  548. IF chattype=3
  549. mxGotoXY(21,13)
  550. mxColour(7,4)
  551. mxPrint('fRoZeN  ')
  552. ENDIF
  553.  
  554. mxGotoXY(xpos1,ypos1)
  555. mxColour(7,0)
  556. JUMP lkeypos
  557.  
  558. CASE 21
  559. freeze:=0
  560. chattype1()
  561. JUMP lkeypos
  562.  
  563. CASE 1
  564. FOR n:=14 TO 24
  565. mxGotoXY(1,n)
  566. mxPrint('\e[K')
  567. ENDFOR
  568. xpos2:=1
  569. ypos2:=14
  570. chattype1()
  571. mxGotoXY(1,15)
  572. mxPrintFile('DOORS:mAGNUMcHAT/Temp.ans')
  573.  
  574. rt.setattrs([RT_TITLE, 'Select Files To Send...', RT_PATH, 'SYS:', NIL, NIL])
  575.  
  576. rt.req(RTREQ_MULTI, [RT_OKGAD, 'Send', RT_FULLNAME, TRUE, NIL])
  577.  
  578.  
  579.   WHILE (s:=rt.get(RT_MULTINEXT))
  580.   mxMenuFunct(24,0,s)
  581.   ENDWHILE
  582.  
  583. spaceflag:=1
  584.  
  585. JUMP begin
  586.  
  587. CASE 17
  588. JUMP end
  589.  
  590.  
  591. CASE 13
  592. ypos1:=ypos1+1
  593. IF ypos1=13
  594. ypos1:=2
  595. ENDIF
  596. spaceflag:=1
  597. mxGotoXY(1,ypos1)
  598. mxPrint('\e[K')
  599. xpos1:=1
  600. StrCopy(word,'',ALL)
  601. JUMP lkeypos
  602.  
  603. CASE 32
  604. space:=xpos1
  605. xpos1:=xpos1+1
  606. StrCopy(word,'',ALL)
  607. mxCharbbs(255)
  608. spaceflag:=1
  609.  
  610. IF xpos1>78 AND ypos1=12
  611. xpos1:=1
  612. ypos1:=2
  613. mxGotoXY(xpos1,ypos1)
  614. mxPrint('\e[K')
  615. ENDIF
  616.  
  617. IF xpos1>78
  618. xpos1:=1
  619. ypos1:=ypos1+1
  620. mxGotoXY(xpos1,ypos1)
  621. mxPrint('\e[K')
  622. ENDIF
  623.  
  624. DEFAULT
  625.  
  626. SELECT write
  627. CASE 1
  628. voweled()
  629. CASE 2
  630. elitemode()
  631. CASE 3
  632. bumpy()
  633. CASE 4
  634. spacetag()
  635. ENDSELECT
  636.  
  637. StringF(chrt,'\c',key)
  638. StrAdd(word,chrt,ALL)
  639.  
  640. StrCopy(macroword,word,ALL)
  641. UpperStr(macroword)
  642.  
  643. IF freeze=1
  644. timenow:=mxGetIntInfo(7)
  645. IF timenow<timeleft
  646. mxAltertime(1)
  647. ENDIF
  648. ENDIF
  649.  
  650. /*
  651. FOR i:=1 TO 4
  652. IF(StrCmp(macroword,strung[i],ALL)=TRUE)
  653. autolen:=StrLen(word)
  654. xpos1:=xpos1-autolen
  655. mxGotoXY(xpos1,ypos1)
  656. StrCopy(auto,'by the way',ALL)
  657. autolen:=StrLen(auto)
  658. length:=autolen+xpos1+1
  659. IF xpos1<2
  660. mxPrint(auto)
  661. xpos1:=xpos1+autolen+1
  662. mxGotoXY(xpos1,ypos1)
  663. JUMP lkeypos
  664. ENDIF
  665. IF length>78
  666. mxGotoXY(xpos1,ypos1)
  667. FOR t:=xpos1 TO 79
  668. mxCharbbs(255)
  669. ENDFOR
  670. ypos1:=ypos1+1
  671. xpos1:=1
  672. mxGotoXY(xpos1,ypos1)
  673. mxPrint(auto)
  674. mxGotoXY(autolen+1,ypos1)
  675. key:=0
  676. xpos1:=autolen
  677. ELSE
  678. mxCharbbs(255)
  679. mxPrint(auto)
  680. xpos1:=xpos1+autolen+1
  681. StrCopy(word,'',ALL)
  682. mxGotoXY(xpos1,ypos1)
  683. JUMP lkeypos
  684. ENDIF
  685. ENDIF
  686. ENDFOR
  687. */
  688.  
  689. /*
  690. FOR i:=1 TO 4 STEP 2
  691. IF(StrCmp(macroword,(confreadauto(i)),ALL)=TRUE)
  692. autolen:=StrLen(word)
  693. xpos1:=xpos1-autolen
  694. mxGotoXY(xpos1,ypos1)
  695. StrCopy(auto,'by the way',ALL)
  696. autolen:=StrLen(auto)
  697. length:=autolen+xpos1+1
  698. IF xpos1<2
  699. mxPrint(auto)
  700. xpos1:=xpos1+autolen+1
  701. mxGotoXY(xpos1,ypos1)
  702. JUMP lkeypos
  703. ENDIF
  704. IF length>78
  705. mxGotoXY(xpos1,ypos1)
  706. FOR t:=xpos1 TO 79
  707. mxCharbbs(255)
  708. ENDFOR
  709. ypos1:=ypos1+1
  710. xpos1:=1
  711. mxGotoXY(xpos1,ypos1)
  712. mxPrint(auto)
  713. mxGotoXY(autolen+1,ypos1)
  714. key:=0
  715. xpos1:=autolen
  716. ELSE
  717. mxCharbbs(255)
  718. mxPrint(auto)
  719. xpos1:=xpos1+autolen+1
  720. StrCopy(word,'',ALL)
  721. mxGotoXY(xpos1,ypos1)
  722. JUMP lkeypos
  723. ENDIF
  724. ENDIF
  725. */
  726.  
  727. IF(lost_carrier=1) THEN RETURN
  728.  
  729. IF ypos1=12 AND xpos1=79
  730. IF key=32
  731. xpos1:=1
  732. ypos1:=2
  733. mxGotoXY(1,2)
  734. mxPrint('\e[K')
  735. JUMP lkeypos
  736. ENDIF
  737. length:=StrLen(word)
  738. IF length>60
  739. xpos1:=1
  740. ypos1:=2
  741. mxGotoXY(xpos1,ypos1)
  742. mxPrint('\e[K')
  743. JUMP lkeypos
  744. ENDIF
  745. ypos1:=2
  746. mxGotoXY(space,12)
  747. FOR n:=space TO 79
  748. xpos1:=xpos1+1
  749. mxCharbbs(255)
  750. ENDFOR
  751. ypos1:=2
  752. mxGotoXY(1,ypos1)
  753. mxPrint('\e[K')
  754. mxPrint(word)
  755. xpos1:=79-space
  756. mxCharbbs(8)
  757. chattype1()
  758. ENDIF
  759.  
  760.  
  761. IF xpos1=79
  762. length:=StrLen(word)
  763. IF length>60
  764. xpos1:=1
  765. ypos1:=ypos1+1
  766. mxGotoXY(xpos1,ypos1)
  767. mxPrint('\e[K')
  768. -> chattype1()
  769. JUMP lkeypos
  770. ENDIF
  771. mxGotoXY(space,ypos1)
  772. FOR n:=space TO 79
  773. mxCharbbs(255)
  774. ENDFOR
  775. ypos1:=ypos1+1
  776. mxGotoXY(1,ypos1)
  777. mxPrint('\e[K')
  778. mxPrint(word)
  779. xpos1:=79-space
  780. mxCharbbs(8)
  781. chattype1()
  782. ENDIF
  783.  
  784. mxCharbbs(key)
  785. xpos1:=xpos1+1
  786. lkeypos:
  787.  
  788. ENDSELECT
  789.  
  790. ELSE
  791.  
  792. -> **************************** REMOTE USER ************************************
  793.  
  794.  
  795. SELECT key
  796.  
  797. IF lastuser=0
  798. mxGotoXY(xpos2,ypos2)
  799. ENDIF
  800.  
  801. lastuser:=1
  802.  
  803. CASE 14
  804. IF cleartype=0
  805. FOR n:=2 TO 12
  806. mxGotoXY(1,n)
  807. mxPrint('\e[K')
  808. ENDFOR
  809. xpos1:=1
  810. ypos1:=2
  811. FOR n:=14 TO 24
  812. mxGotoXY(1,n)
  813. mxPrint('\e[K')
  814. ENDFOR
  815. xpos2:=1
  816. ypos2:=14
  817. mxGotoXY(xpos1,ypos1)
  818. JUMP lkeypos
  819. ENDIF
  820. IF cleartype=1
  821. mxGotoXY(1,14)
  822. FOR t:=1 TO 11
  823. mxPrint('\e[1M')
  824. ENDFOR
  825. mxGotoXY(1,2)
  826. FOR t:=1 TO 11
  827. mxPrint('\e[1M')
  828. ENDFOR
  829. mxGotoXY(1,2)
  830. FOR t:=1 TO 11
  831. mxPrint('\e[1L')
  832. ENDFOR
  833. mxGotoXY(1,14)
  834. FOR t:=1 TO 11
  835. mxPrint('\e[1L')
  836. ENDFOR
  837. xpos1:=1
  838. ypos1:=2
  839. xpos2:=1
  840. ypos2:=14
  841. chattype1()
  842. JUMP lkeypos
  843. ENDIF
  844.  
  845. CASE 127
  846. IF cleartype=0
  847. FOR n:=14 TO 24
  848. mxGotoXY(1,n)
  849. mxPrint('\e[K')
  850. ENDFOR
  851. mxGotoXY(1,14)
  852. xpos2:=1
  853. ypos2:=14
  854. chattype1()
  855. JUMP lkeypos2
  856. ENDIF
  857.  
  858. IF cleartype=1
  859. mxGotoXY(1,14)
  860. FOR t:=1 TO 11
  861. mxPrint('\e[1M')
  862. ENDFOR
  863. mxGotoXY(1,14)
  864. FOR t:=1 TO 11
  865. mxPrint('\e[1L')
  866. ENDFOR
  867. xpos2:=1
  868. ypos2:=14
  869. chattype1()
  870. JUMP lkeypos2
  871. ENDIF
  872.  
  873. CASE 12
  874. IF cleartype=0
  875. FOR n:=2 TO 12
  876. mxGotoXY(1,n)
  877. mxPrint('\e[K')
  878. ENDFOR
  879. xpos1:=1
  880. ypos1:=2
  881. FOR n:=14 TO 24
  882. mxGotoXY(1,n)
  883. mxPrint('\e[K')
  884. ENDFOR
  885. xpos2:=1
  886. ypos2:=14
  887. chattype1()
  888. JUMP lkeypos2
  889. ENDIF
  890. IF cleartype=1
  891. mxGotoXY(1,14)
  892. FOR t:=1 TO 11
  893. mxPrint('\e[1M')
  894. ENDFOR
  895. mxGotoXY(1,14)
  896. FOR t:=1 TO 11
  897. mxPrint('\e[1L')
  898. ENDFOR
  899. xpos2:=1
  900. ypos2:=14
  901. chattype1()
  902. JUMP lkeypos2
  903. ENDIF
  904.  
  905. CASE 8
  906. IF xpos2>1
  907. mxCharbbs(8)
  908. xpos2:=xpos2-1
  909. IF(StrLen(wordtwo)=1)
  910. StrCopy(wordtwo,'',ALL)
  911. ELSE
  912. length:=(StrLen(wordtwo)-1)
  913. StrCopy(wordtwo,wordtwo,length)
  914. ENDIF
  915. JUMP lkeypos2
  916. ENDIF
  917.  
  918. CASE 17
  919. JUMP end
  920.  
  921. CASE 13
  922. ypos2:=ypos2+1
  923. IF ypos2=25
  924. ypos2:=14
  925. ENDIF
  926. mxGotoXY(1,ypos2)
  927. mxPrint('\e[K')
  928. xpos2:=1
  929. JUMP lkeypos2
  930.  
  931.  
  932. CASE 32
  933. space2:=xpos2
  934. xpos2:=xpos2+1
  935. StrCopy(wordtwo,'',ALL)
  936. mxCharbbs(255)
  937.  
  938. IF xpos2>78 AND ypos2=24
  939. xpos2:=1
  940. ypos2:=14
  941. mxGotoXY(xpos2,ypos2)
  942. mxPrint('\e[K')
  943. ENDIF
  944.  
  945. IF xpos2>78
  946. xpos2:=1
  947. ypos2:=ypos2+1
  948. mxGotoXY(xpos2,ypos2)
  949. mxPrint('\e[K')
  950. ENDIF
  951.  
  952. DEFAULT
  953.  
  954. IF freeze=1
  955. timenow:=mxGetIntInfo(7)
  956. IF timenow<timeleft
  957. mxAltertime(1)
  958. ENDIF
  959. ENDIF
  960.  
  961. IF key=27
  962. esc:=1
  963. JUMP lkeypos2
  964. ENDIF
  965.  
  966. IF(key=91) AND (esc=1)
  967. sqbrack:=1
  968. esc:=0
  969. JUMP lkeypos2
  970. ENDIF
  971.  
  972. IF(key=65) AND (sqbrack=1)
  973. sqbrack:=0
  974. IF ypos2>14
  975. ypos2:=ypos2-1
  976. mxPrint('\e[A')
  977. JUMP lkeypos2
  978. ELSE
  979. JUMP lkeypos2
  980. ENDIF
  981. ENDIF
  982.  
  983. IF(key=66) AND (sqbrack=1)
  984. sqbrack:=0
  985. IF ypos2>23
  986. JUMP lkeypos2
  987. ELSE
  988. ypos2:=ypos2+1
  989. mxPrint('\e[B')
  990. JUMP lkeypos2
  991. ENDIF
  992. ENDIF
  993.  
  994. IF(key=67) AND (sqbrack=1)
  995. sqbrack:=0
  996. IF xpos2=78
  997. JUMP lkeypos2
  998. ELSE
  999. mxPrint('\e[C')
  1000. StrCopy(wordtwo,'',ALL)
  1001. space2:=xpos2
  1002. xpos2:=xpos2+1
  1003. JUMP lkeypos2
  1004. ENDIF
  1005. ENDIF
  1006.  
  1007. IF(key=68) AND (sqbrack=1)
  1008. sqbrack:=0
  1009. IF xpos2>1
  1010. xpos2:=xpos2-1
  1011. mxPrint('\e[D')
  1012. JUMP lkeypos2
  1013. ELSE
  1014. JUMP lkeypos2
  1015. ENDIF
  1016. ENDIF
  1017.  
  1018.  
  1019. StringF(chrt2,'\c',key)
  1020. StrAdd(wordtwo,chrt2,ALL)
  1021.  
  1022. /*
  1023. IF(StrCmp(wordtwo,'BTW',ALL)=TRUE)
  1024. autolen:=StrLen(wordtwo)
  1025. xpos2:=xpos2-autolen
  1026. mxGotoXY(xpos2,ypos2)
  1027. StrCopy(auto,'by the way',ALL)
  1028. autolen:=StrLen(auto)
  1029. length:=autolen+xpos2+1
  1030. IF xpos2<2
  1031. mxPrint(auto)
  1032. xpos2:=xpos2+autolen+1
  1033. mxGotoXY(xpos2,ypos2)
  1034. JUMP lkeypos2
  1035. ENDIF
  1036. IF length>78
  1037. mxGotoXY(xpos2,ypos2)
  1038. FOR t:=xpos2 TO 79
  1039. mxCharbbs(255)
  1040. ENDFOR
  1041. ypos2:=ypos2+1
  1042. xpos2:=1
  1043. mxGotoXY(xpos2,ypos2)
  1044. mxPrint(auto)
  1045. mxGotoXY(autolen+1,ypos2)
  1046. key:=0
  1047. xpos2:=autolen
  1048. ELSE
  1049. mxPrint(' ')
  1050. mxPrint(auto)
  1051. xpos2:=xpos2+autolen+1
  1052. StrCopy(wordtwo,'',ALL)
  1053. mxGotoXY(xpos2,ypos2)
  1054. JUMP lkeypos2
  1055. ENDIF
  1056. ENDIF
  1057. */
  1058.  
  1059.  
  1060. IF ypos2=24 AND xpos2=79
  1061. length2:=StrLen(wordtwo)
  1062. IF length2>60
  1063. xpos2:=1
  1064. ypos2:=14
  1065. mxGotoXY(xpos2,ypos2)
  1066. mxPrint('\e[K')
  1067. chattype1()
  1068. JUMP lkeypos2
  1069. ENDIF
  1070. ypos2:=14
  1071. mxGotoXY(space2,24)
  1072. FOR n:=space2 TO 79
  1073. xpos2:=xpos2+1
  1074. mxCharbbs(255)
  1075. ENDFOR
  1076. ypos2:=14
  1077. mxGotoXY(1,ypos2)
  1078. mxPrint('\e[K')
  1079. mxPrint(wordtwo)
  1080. xpos2:=79-space2
  1081. chattype1()
  1082. ENDIF
  1083.  
  1084. IF xpos2=79
  1085. length2:=StrLen(wordtwo)
  1086. IF length2>60
  1087. xpos2:=1
  1088. ypos2:=ypos2+1
  1089. mxGotoXY(xpos2,ypos2)
  1090. mxPrint('\e[K')
  1091. -> chattype1()
  1092. JUMP lkeypos2
  1093. ENDIF
  1094. mxGotoXY(space2,ypos2)
  1095. FOR n:=space2 TO 79
  1096. mxCharbbs(255)
  1097. ENDFOR
  1098. ypos2:=ypos2+1
  1099. mxGotoXY(1,ypos2)
  1100. mxPrint('\e[K')
  1101. mxPrint(wordtwo)
  1102. xpos2:=79-space2
  1103. chattype1()
  1104. ENDIF
  1105.  
  1106. xpos2:=xpos2+1
  1107.  
  1108. mxCharbbs(key)
  1109.  
  1110. lkeypos2:
  1111.  
  1112. ENDSELECT
  1113.  
  1114. ENDIF
  1115.  
  1116. ENDLOOP
  1117.  
  1118. end:
  1119. Execute('C:Delete ENV:Chatting QUIET',0,0)
  1120. ENDPROC
  1121.  
  1122. -> *************** PROCS **********
  1123.  
  1124. PROC elitemode()    -> Procedure for el!7e mode
  1125. SELECT key
  1126. CASE 97
  1127. key:=132
  1128.  
  1129. CASE 98
  1130. key:=225
  1131.  
  1132. CASE 99
  1133. key:=128
  1134.  
  1135. CASE 101
  1136. key:=228
  1137.  
  1138. CASE 102
  1139. key:=244
  1140.  
  1141. CASE 105
  1142. key:=33
  1143.  
  1144. CASE 106
  1145. key:=245
  1146.  
  1147. CASE 110
  1148. key:=239
  1149.  
  1150. CASE 111
  1151. key:=233
  1152.  
  1153. CASE 114
  1154. key:=226
  1155.  
  1156. CASE 115
  1157. key:=53
  1158.  
  1159. CASE 116
  1160. key:=55
  1161.  
  1162. CASE 117
  1163. key:=154
  1164.  
  1165. CASE 121
  1166. key:=157
  1167.  
  1168. CASE 63
  1169. key:=168
  1170. ENDSELECT
  1171. ENDPROC
  1172.  
  1173.  
  1174. PROC voweled()
  1175.  
  1176. SELECT key
  1177. CASE 97
  1178. key:=65
  1179.  
  1180. CASE 101
  1181. key:=69
  1182.  
  1183. CASE 105
  1184. key:=73
  1185.  
  1186. CASE 111
  1187. key:=79
  1188.  
  1189. CASE 117
  1190. key:=85
  1191. ENDSELECT
  1192. ENDPROC
  1193.  
  1194. PROC bumpy()
  1195.  
  1196. IF bump=0
  1197. SELECT key
  1198. CASE 97
  1199. key:=65
  1200. CASE 98
  1201. key:=66
  1202. CASE 99
  1203. key:=67
  1204. CASE 100
  1205. key:=68
  1206. CASE 101
  1207. key:=69
  1208. CASE 102
  1209. key:=70
  1210. CASE 103
  1211. key:=71
  1212. CASE 104
  1213. key:=72
  1214. CASE 105
  1215. key:=73
  1216. CASE 106
  1217. key:=74
  1218. CASE 107
  1219. key:=75
  1220. CASE 108
  1221. key:=76
  1222. CASE 109
  1223. key:=77
  1224. CASE 110
  1225. key:=78
  1226. CASE 111
  1227. key:=79
  1228. CASE 112
  1229. key:=80
  1230. CASE 113
  1231. key:=81
  1232. CASE 114
  1233. key:=82
  1234. CASE 115
  1235. key:=83
  1236. CASE 116
  1237. key:=84
  1238. CASE 117
  1239. key:=85
  1240. CASE 118
  1241. key:=86
  1242. CASE 119
  1243. key:=87
  1244. CASE 120
  1245. key:=88
  1246. CASE 121
  1247. key:=89
  1248. CASE 122
  1249. key:=90
  1250. ENDSELECT
  1251. bump:=1
  1252. ELSE
  1253. bump:=0
  1254. ENDIF
  1255. ENDPROC
  1256.  
  1257. PROC spacetag()
  1258. IF spaceflag=1
  1259.  
  1260. IF(key>64) AND (key<91)
  1261. key:=key+32
  1262. ENDIF
  1263.  
  1264. ELSE
  1265.  
  1266. IF(key>96) AND (key<123)
  1267. key:=key-32
  1268. ENDIF
  1269.  
  1270.  
  1271.  
  1272. ENDIF
  1273. spaceflag:=0
  1274. ENDPROC
  1275.  
  1276. PROC chattype1() -> Sort out auto-insert updating for Chat Type 0 & 1
  1277.  
  1278. SELECT chattype
  1279. CASE 1
  1280. IF freeze=0
  1281. mxGotoXY(50,13)
  1282. mxColour(3,0)
  1283. mxPrint(' Time Remaining: %k mins')
  1284. ENDIF
  1285. IF wherefrom=0
  1286. mxColour(7,0)
  1287. mxGotoXY(xpos1,ypos1)
  1288. ELSE
  1289. mxColour(7,0)
  1290. mxGotoXY(xpos2,ypos2)
  1291. ENDIF
  1292.  
  1293. CASE 2
  1294. IF freeze=0
  1295. mxGotoXY(52,13)
  1296. mxColour(6,0)
  1297. mxPrint('Time Remaining: %k mins')
  1298. ENDIF
  1299.  
  1300. CASE 3
  1301. IF freeze=0
  1302. mxGotoXY(21,25)
  1303. mxColour(7,4)
  1304. mxPrint('%k')
  1305. mxColour(6,4)
  1306. mxPrint(' mins')
  1307. ENDIF
  1308. mxGotoXY(7,25)
  1309. mxColour(7,4)
  1310. mxPrint('%d')
  1311.  
  1312. CASE 4
  1313. IF freeze=0
  1314. mxGotoXY(21,13)
  1315. mxColour(7,4)
  1316. mxPrint('%k')
  1317. mxColour(1,4)
  1318. mxPrint(' mins')
  1319. ENDIF
  1320. mxGotoXY(7,13)
  1321. mxColour(7,4)
  1322. mxPrint('%d')
  1323.  
  1324. ENDSELECT
  1325. IF wherefrom=0
  1326. mxColour(7,0)
  1327. mxGotoXY(xpos1,ypos1)
  1328. ELSE
  1329. mxColour(7,0)
  1330. mxGotoXY(xpos2,ypos2)
  1331. ENDIF
  1332. ENDPROC
  1333.  
  1334. PROC chatsix()
  1335. mxGotoXY(1,1)
  1336. mxColour(6,0)
  1337. mxPrint('-')
  1338. mxColour(3,0)
  1339. mxPrint(' tHE sYSOP: ')
  1340. mxColour(4,0)
  1341. mxPrint('>>>->>  ')
  1342. mxColour(6,0)
  1343. mxPrint('>>>->>  ')
  1344. mxColour(4,0)
  1345. mxPrint('>>>->>  ')
  1346. mxColour(6,0)
  1347. mxPrint('>>>->>  ')
  1348. mxColour(4,0)
  1349. mxPrint('>>>->>  ')
  1350. mxColour(6,0)
  1351. mxPrint('>>>->>  ')
  1352. mxColour(4,0)
  1353. mxPrint('>>>->>  ')
  1354. mxColour(6,0)
  1355. mxPrint('>>>->>  ')
  1356. mxColour(4,0)
  1357. mxPrint('>>')
  1358. mxGotoXY(14,1)
  1359. mxColour(3,0)
  1360. mxPrintLine(0)
  1361. mxCharbbs(255)
  1362. mxGotoXY(1,13)
  1363. mxColour(3,0)
  1364. mxPrint(' wITTERING tO ')
  1365. mxColour(6,0)
  1366. mxPrint('>>>->>  ')
  1367. mxColour(4,0)
  1368. mxPrint('>>>->>  ')
  1369. mxColour(6,0)
  1370. mxPrint('>>>->>  ')
  1371. mxColour(4,0)
  1372. mxPrint('>>>->>  ')
  1373. mxColour(6,0)
  1374. mxPrint('>>>->>  ')
  1375. mxColour(4,0)
  1376. mxPrint('>>>->>  ')
  1377. mxColour(6,0)
  1378. mxPrint('>>>->>  ')
  1379. mxColour(4,0)
  1380. mxPrint('>>>->>  ')
  1381. mxColour(6,0)
  1382. mxPrint('>')
  1383. mxGotoXY(15,13)
  1384. mxColour(3,0)
  1385. mxPrint(username)
  1386. mxCharbbs(255)
  1387. mxGotoXY(1,25)
  1388. mxColour(4,0)
  1389. mxPrint('>>>->>  ')
  1390. mxColour(6,0)
  1391. mxPrint('>>>->>')
  1392. mxColour(2,0)
  1393. mxPrint(' mAGNUM cHAT v1.15 bY sTONECOLD ')
  1394. mxColour(4,0)
  1395. mxPrint('>>>->>  ')
  1396. mxColour(6,0)
  1397. mxPrint('>>>->>  ')
  1398. mxColour(4,0)
  1399. mxPrint('>>>->>  ')
  1400. mxColour(6,0)
  1401. mxPrint('>>>->>  ')
  1402. mxColour(4,0)
  1403. mxPrint('>')
  1404.  
  1405. ENDPROC
  1406.  
  1407. -> Alter User Time  For the freeze time option!
  1408. PROC mxAltertime(timechange)
  1409.   p1.command:=21
  1410.   p1.data:=timechange
  1411.   p1.string[]:=0
  1412.   putWaitMsg(p1)
  1413. ENDPROC
  1414.  
  1415. -> Centre Text
  1416. PROC mxCentre(y,text)
  1417. DEF str[80]:STRING,len
  1418. len:=StrLen(text)
  1419. len:=(80-len)/2
  1420. StringF(str,'\e[\d;\dH\s',y,len,text)
  1421. mxPrint(str)
  1422. ENDPROC
  1423.  
  1424. -> Print a string
  1425. PROC mxPrint(str:PTR TO CHAR)
  1426.   p1.command:=1
  1427.   p1.data:=0
  1428.   doCopy(p1.string,str)
  1429.   putWaitMsg(p1)
  1430. ENDPROC
  1431.  
  1432. -> Print Text to local screen only
  1433. PROC mxPrintLocal(str:PTR TO CHAR)
  1434.   p1.command:=2
  1435.   p1.data:=0
  1436.   doCopy(p1.string,str)
  1437.   putWaitMsg(p1)
  1438. ENDPROC
  1439.  
  1440. -> Print character to serial port only
  1441. PROC mxCharSer(char:LONG)
  1442.   p1.command:=3
  1443.   p1.data:=char
  1444.   putWaitMsg(p1)
  1445. ENDPROC
  1446.  
  1447. -> Print Character to screen only
  1448. PROC mxCharScr(char:LONG)
  1449.   p1.command:=4
  1450.   p1.data:=char
  1451.   putWaitMsg(p1)
  1452. ENDPROC
  1453.  
  1454. -> Print Character to BBS
  1455. PROC mxCharbbs(char:LONG)
  1456.   p1.command:=5
  1457.   p1.data:=char
  1458.   putWaitMsg(p1)
  1459. ENDPROC
  1460.  
  1461. -> Input a string. NOTE: buffer *MUST* point to an E-String!!!!
  1462. PROC mxInput(maxlen:PTR TO INT,buffer)
  1463.   DEF rt
  1464.   p1.command:=6
  1465.   p1.data:=maxlen
  1466.   p1.string[]:=0
  1467.   rt:=putWaitMsg(p1)
  1468.   StrCopy(buffer,p1.string)
  1469. ENDPROC
  1470.  
  1471. -> Reads a key
  1472. -> Returns ASCII value
  1473. -> IF(wherefrom=0) its from the local terminal
  1474. -> IF(wherefrom=1) its from the remote terminal
  1475. PROC mxHotKey()
  1476.   DEF rt
  1477.   p1.command:=8
  1478.   p1.data:=0
  1479.   p1.string[]:=0
  1480.   rt:=putWaitMsg(p1)
  1481.   wherefrom:=Char(p1.string-1)
  1482. ENDPROC Char(p1.string)
  1483.  
  1484. -> Reads a key but returns to program
  1485. PROC mxNoWaitHotKey()
  1486.   DEF rt
  1487.   p1.command:=201
  1488.   p1.data:=0
  1489.   p1.string[]:=0
  1490.   rt:=putWaitMsg(p1)
  1491.   wherefrom:=Char(p1.string-1)
  1492. ENDPROC Char(p1.string)
  1493.  
  1494. -> Twit the user
  1495. PROC mxTwit()
  1496.   p1.command:=9
  1497.   putWaitMsg(p1)
  1498. ENDPROC
  1499.  
  1500. -> Print a text file
  1501. PROC mxPrintFile(filename)
  1502.   p1.command:=10
  1503.   p1.data:=0
  1504.   doCopy(p1.string,filename)
  1505.   putWaitMsg(p1)
  1506. ENDPROC
  1507.  
  1508. -> Check file is online
  1509. -> 1 if yes, -1 if no
  1510. PROC mxCheckFile(filename)
  1511.   DEF rt
  1512.   p1.command:=11
  1513.   p1.data:=0
  1514.   doCopy(p1.string,filename)
  1515.   rt:=putWaitMsg(p1)
  1516. ENDPROC p1.data
  1517.  
  1518. -> Get user information values
  1519. PROC mxGetIntInfo(type:PTR TO INT)
  1520.   p1.command:=13
  1521.   p1.data:=type
  1522.   p1.string[]:=0
  1523.   putWaitMsg(p1)
  1524. ENDPROC p1.data
  1525.  
  1526. -> Get user/BBS strings
  1527. -> buffer *MUST* point to an E-String
  1528. PROC mxGetStrInfo(type,buffer)
  1529.   p1.command:=14
  1530.   p1.data:=type
  1531.   p1.string[]:=0
  1532.   putWaitMsg(p1)
  1533.   StrCopy(buffer,p1.string)
  1534. ENDPROC
  1535.  
  1536. -> Change String
  1537. PROC mxChangeStr(type,buffer)
  1538.   p1.command:=16
  1539.   p1.data:=type
  1540.   p1.string[]:=0
  1541.   putWaitMsg(p1)
  1542.   StrCopy(buffer,p1.string)
  1543. ENDPROC
  1544.  
  1545. -> Get random number
  1546. PROC mxRandom(maxnum:LONG)
  1547.   p1.command:=17
  1548.   p1.data:=maxnum
  1549. ENDPROC p1.data
  1550.  
  1551. -> Reset Carrier PARAGON ONLY!
  1552. PROC mxResetCarr()
  1553.   p1.command:=18
  1554. ENDPROC
  1555.  
  1556. -> Show Gfx  PARAGON ONLY!
  1557. PROC mxShowGfx(filename:PTR TO CHAR)
  1558.   StrCopy(filename,ALL)
  1559.   p1.command:=19
  1560. ENDPROC
  1561.  
  1562. -> ShutDown Door Port
  1563. PROC mxShutDown()
  1564. p1.command:=20
  1565. ENDPROC
  1566.  
  1567. -> Standard LogOff
  1568. PROC mxLogOff()
  1569.   p1.command:=101
  1570.   p1.data:=0
  1571.   p1.string[]:=0
  1572.   putWaitMsg(p1)
  1573. ENDPROC
  1574.  
  1575. -> Goto Menu
  1576. PROC mxGotoMenu(menu)
  1577.   p1.command:=102
  1578.   p1.data:=menu
  1579.   p1.string[]:=0
  1580.   putWaitMsg(p1)
  1581. ENDPROC
  1582.  
  1583. -> Chat Call
  1584. PROC mxChatCall(plays)
  1585.   p1.command:=103
  1586.   p1.data:=plays
  1587.   p1.string[]:=0
  1588.   putWaitMsg(p1)
  1589. ENDPROC
  1590.  
  1591. -> Prompt User ANSI Flag
  1592. PROC mxSetAnsiFlag()
  1593.   p1.command:=104
  1594.   p1.data:=0
  1595.   p1.string[]:=0
  1596.   putWaitMsg(p1)
  1597. ENDPROC
  1598.  
  1599. -> Prompt CLS Flag
  1600. PROC mxSetCls()
  1601.   p1.command:=105
  1602.   p1.data:=0
  1603.   p1.string[]:=0
  1604.   putWaitMsg(p1)
  1605. ENDPROC
  1606.  
  1607. -> Prompt Pause Flag
  1608. PROC mxSetPause()
  1609.   p1.command:=106
  1610.   p1.data:=0
  1611.   p1.string[]:=0
  1612.   putWaitMsg(p1)
  1613. ENDPROC
  1614.  
  1615. -> Prompt FSE Flag
  1616. PROC mxSetFSE()
  1617.   p1.command:=107
  1618.   p1.data:=0
  1619.   p1.string[]:=0
  1620.   putWaitMsg(p1)
  1621. ENDPROC
  1622.  
  1623. -> Change # Screen Lines
  1624. PROC mxSetLines()
  1625.   p1.command:=108
  1626.   p1.data:=0
  1627.   p1.string[]:=0
  1628.   putWaitMsg(p1)
  1629. ENDPROC
  1630.  
  1631. -> Change Location
  1632. PROC mxSetLoc()
  1633.   p1.command:=109
  1634.   p1.data:=0
  1635.   p1.string[]:=0
  1636.   putWaitMsg(p1)
  1637. ENDPROC
  1638.  
  1639. -> Change Phone Number
  1640. PROC mxSetFone()
  1641.   p1.command:=110
  1642.   p1.data:=0
  1643.   p1.string[]:=0
  1644.   putWaitMsg(p1)
  1645. ENDPROC
  1646.  
  1647. -> Change Computer Desc
  1648. PROC mxSetCompDesc()
  1649.   p1.command:=111
  1650.   p1.data:=0
  1651.   p1.string[]:=0
  1652.   putWaitMsg(p1)
  1653. ENDPROC
  1654.  
  1655. -> Change User Password
  1656. PROC mxSetPass()
  1657.   p1.command:=112
  1658.   p1.data:=0
  1659.   p1.string[]:=0
  1660.   putWaitMsg(p1)
  1661. ENDPROC
  1662.  
  1663. PROC mxPrintFileNP(filename)
  1664.   p1.command:=114
  1665.   p1.data:=0
  1666.   doCopy(p1.string,filename)
  1667.   putWaitMsg(p1)
  1668. ENDPROC
  1669.  
  1670. -> Print MAX Line   MAXsBBS Only
  1671. PROC mxPrintLine(line)
  1672.   p1.command:=115
  1673.   p1.data:=line
  1674.   p1.string[]:=0
  1675.   putWaitMsg(p1)
  1676. ENDPROC
  1677.  
  1678. -> Leave a message
  1679. PROC mxLeaveMessage(section,to)
  1680.   p1.command:=116
  1681.   doCopy(p1.data,section)
  1682.   doCopy(p1.string,to)
  1683.   putWaitMsg(p1)
  1684. ENDPROC
  1685.  
  1686. -> Read Messages
  1687. PROC mxReadMessage(section)
  1688.   p1.command:=117
  1689.   doCopy(p1.data,section)
  1690.   p1.string[]:=0
  1691.   putWaitMsg(p1)
  1692. ENDPROC
  1693.  
  1694. -> Read Messages w/o reply
  1695. PROC mxMessageNoReply(section)
  1696.   p1.command:=135
  1697.   doCopy(p1.data,section)
  1698.   p1.string[]:=0
  1699.   putWaitMsg(p1)
  1700. ENDPROC
  1701.  
  1702. -> List/Search Users
  1703. PROC mxListUsers()
  1704.   p1.command:=118
  1705.   p1.data:=0
  1706.   p1.string[]:=0
  1707.   putWaitMsg(p1)
  1708. ENDPROC
  1709.  
  1710. -> Upload File
  1711. PROC mxUpload(section,path)
  1712.   p1.command:=123
  1713.   p1.data:=section
  1714.   doCopy(p1.string,path)
  1715.   putWaitMsg(p1)
  1716. ENDPROC
  1717.  
  1718. -> Download File
  1719. PROC mxDownload(section,filename)
  1720.   p1.command:=124
  1721.   p1.data:=section
  1722.   doCopy(p1.string,filename)
  1723.   putWaitMsg(p1)
  1724. ENDPROC
  1725.  
  1726. -> CLI
  1727. PROC mxCLI()
  1728.   p1.command:=128
  1729.   putWaitMsg(p1)
  1730. ENDPROC
  1731.  
  1732. -> Set Transfer Protocol
  1733. PROC mxProtocol()
  1734.   p1.command:=133
  1735.   p1.data:=0
  1736.   p1.string[]:=0
  1737.   putWaitMsg(p1)
  1738. ENDPROC
  1739.  
  1740. -> Set Junk Mail
  1741. PROC mxJunkMail()
  1742.   p1.command:=136
  1743.   p1.data:=0
  1744.   p1.string[]:=0
  1745.   putWaitMsg(p1)
  1746. ENDPROC
  1747.  
  1748. -> Who's Online
  1749. PROC mxWho()
  1750.   p1.command:=138
  1751.   p1.data:=0
  1752.   p1.string[]:=0
  1753.   putWaitMsg(p1)
  1754. ENDPROC
  1755.  
  1756. PROC mxBeep()
  1757. DisplayBeep(NIL)
  1758. ENDPROC
  1759.   
  1760. -> Do a maxs bbs menu function
  1761. PROC mxMenuFunct(menufunc,extra,string)
  1762.   p1.command:=menufunc+100
  1763.   p1.data:=extra
  1764.   doCopy(p1.string,string)
  1765.   putWaitMsg(p1)
  1766. ENDPROC
  1767.  
  1768. -> Change a user int value
  1769. -> MAXs BBS only!
  1770. PROC mxChangeUserInt(uint,value)
  1771.   p1.command:=200
  1772.   p1.data:=uint
  1773.   p1.string[]:=value
  1774.   putWaitMsg(p1)
  1775. ENDPROC
  1776.  
  1777. -> Set page flag MAXsBBS ONLY!
  1778. PROC mxSetPageFlag(state)
  1779.   p1.command:=202
  1780.   p1.data:=state
  1781.   putWaitMsg(p1)
  1782. ENDPROC
  1783.  
  1784. -> Clear Screen
  1785. PROC mxCls()
  1786.   DEF str[1]:STRING
  1787.   StringF(str,'\c',12)
  1788.   mxPrint(str)
  1789. ENDPROC
  1790.  
  1791. -> Goto XY
  1792. PROC mxGotoXY(x,y)
  1793.   DEF goat[10]:STRING
  1794.   StringF(goat,'\e[\d;\dH',y,x)
  1795.   mxPrint(goat)
  1796. ENDPROC
  1797.  
  1798. -> Text Colour
  1799. PROC mxColour(f,b)
  1800.   DEF goat[10]:STRING
  1801.   StringF(goat,'\e[3\d;4\dm',f,b)
  1802.   mxPrint(goat)
  1803. ENDPROC
  1804.  
  1805. -> Set Text Style
  1806. PROC mxStyle(style)
  1807.   DEF goat[10]:STRING
  1808.   StringF(goat,'\e[\dm',style)
  1809.   mxPrint(goat)
  1810. ENDPROC
  1811.  
  1812. -> Move x Lines Up
  1813. PROC mxCursUp(x)
  1814.   DEF goat[10]:STRING
  1815.   StringF(goat,'\e[\dA',x)
  1816.   mxPrint(goat)
  1817. ENDPROC
  1818.  
  1819. -> Move x lines down
  1820. PROC mxCursDown(x)
  1821.   DEF goat[10]:STRING
  1822.   StringF(goat,'\e[\dB',x)
  1823.   mxPrint(goat)
  1824. ENDPROC
  1825.  
  1826. -> Move x Characters Left
  1827. PROC mxCharLeft(x)
  1828.   DEF goat[10]:STRING
  1829.   StringF(goat,'\e[\dC',x)
  1830.   mxPrint(goat)
  1831. ENDPROC
  1832.  
  1833. -> Move x Characters Right
  1834. PROC mxCharRight(x)
  1835.   DEF goat[10]:STRING
  1836.   StringF(goat,'\e[\dD',x)
  1837.   mxPrint(goat)
  1838. ENDPROC
  1839.  
  1840. -> Move x Lines Down and move to left
  1841. PROC mxCursDownLeft(x)
  1842.   DEF goat[10]:STRING
  1843.   StringF(goat,'\e[\dE',x)
  1844.   mxPrint(goat)
  1845. ENDPROC
  1846.  
  1847. -> Move x Lines Up and move to char 1
  1848. PROC mxCursUpChar(x)
  1849.   DEF goat[10]:STRING
  1850.   StringF(goat,'\e[\dF',x)
  1851.   mxPrint(goat)
  1852. ENDPROC
  1853.  
  1854. -> Move Line x Lines Up
  1855. PROC mxLineUp(x)
  1856.   DEF goat[10]:STRING
  1857.   StringF(goat,'\e[\dS',x)
  1858.   mxPrint(goat)
  1859. ENDPROC
  1860.  
  1861. -> Move Line x Lines Down
  1862. PROC mxLineDown(x)
  1863.   DEF goat[10]:STRING
  1864.   StringF(goat,'\e[\dT',x)
  1865.   mxPrint(goat)
  1866. ENDPROC
  1867.  
  1868. -> Wait for reply msg
  1869. -> returns ptr to string
  1870.  
  1871. PROC putWaitMsg(msg:PTR TO doormsg)
  1872.   DEF rmsg
  1873.   PutMsg(cport,msg)
  1874. waitloop:
  1875.   WaitPort(mport)
  1876.   IF(rmsg:=GetMsg(mport))=0 THEN JUMP waitloop
  1877.   lost_carrier:=p1.carrier
  1878. ENDPROC rmsg  
  1879.  
  1880. PROC doCopy(dest:PTR TO CHAR,src:PTR TO CHAR)
  1881.   DEF c
  1882.   FOR c:=0 TO StrLen(src)
  1883.     PutChar(dest+c,Char(src+c))
  1884.   ENDFOR
  1885. ENDPROC
  1886.  
  1887. PROC main()
  1888.  
  1889.  
  1890.   -> Grab the node number
  1891.    StringF(msgportname,'DoorControl\c',Char(arg))
  1892.    StringF(msgportname2,'DoorReply\c',Char(arg))
  1893.  
  1894.  
  1895.   -> Make msg port & msg:
  1896.   IF(mport:=createPort(msgportname2,0))
  1897.  
  1898.     ourtask:=FindTask(NIL)
  1899.  
  1900.     p1.door_msg.ln.type:=NT_MESSAGE
  1901.     p1.door_msg.replyport:=mport
  1902.     p1.door_msg.length:=SIZEOF doormsg
  1903.  
  1904.     -> Find  M A X's BBS door control port prt:
  1905.  
  1906.     Forbid()
  1907.     cport:=FindPort(msgportname)
  1908.     Permit()
  1909.     IF(cport>0)
  1910.  
  1911.       -> Startup code complete!
  1912.       theDoor()
  1913.  
  1914.       -> Closedown code
  1915.       p1.command:=20
  1916.       p1.data:=0
  1917.       putWaitMsg(p1)
  1918.     ELSE
  1919.       WriteF('This is a door for Paragon Door Systems!\n')
  1920.     ENDIF
  1921.  
  1922.     -> Clean up and return
  1923.     deletePort(mport)           -> Free port
  1924.   ENDIF
  1925.  
  1926. ENDPROC
  1927.  
  1928.  
  1929. PROC confreadstr(line)
  1930. DEF str[100]:STRING,confighandle,x,len
  1931.  
  1932. IF(confighandle:=Open('DOORS:MagnumChat/MagnumChat.cfg',MODE_OLDFILE))=NIL
  1933. mxCls()
  1934. mxCentre(6,'Can\at Open Magnum Chat Configuration File')
  1935. mxHotKey()
  1936.       p1.command:=20
  1937.       p1.data:=0
  1938.       putWaitMsg(p1)
  1939. ELSE
  1940. FOR x:=1 TO line
  1941. Fgets(confighandle,str,ALL)
  1942. ENDFOR
  1943.  
  1944. len:=StrLen(str)
  1945. StrCopy(str,str,len-1)
  1946. ENDIF
  1947.  
  1948. Close(confighandle)
  1949.  
  1950. ENDPROC str
  1951.  
  1952.  
  1953. PROC confreadvalue(line)
  1954. DEF str[100]:STRING, value, x, confighandle
  1955.  
  1956. IF (confighandle:=Open('DOORS:MagnumChat/MagnumChat.cfg',MODE_OLDFILE))=NIL
  1957. mxCls()
  1958. mxCentre(6,'Can\at Open Magnum Chat Configuration File')
  1959. mxHotKey()
  1960.       p1.command:=20
  1961.       p1.data:=0
  1962.       putWaitMsg(p1)
  1963. ELSE
  1964. FOR x:=1 TO line
  1965. Fgets(confighandle,str,100)
  1966. value:=Val(str,0)
  1967. ENDFOR
  1968. ENDIF
  1969. Close(confighandle)
  1970.  
  1971. ENDPROC value
  1972.  
  1973. PROC confreadauto(line)
  1974. DEF str[100]:STRING,confighandle,x,len
  1975.  
  1976. IF(confighandle:=Open('DOORS:MagnumChat/macros.cfg',MODE_OLDFILE))=NIL
  1977. mxCls()
  1978. mxCentre(6,'Can\at Open Magnum Chat Autoinsert.cfg File')
  1979. mxHotKey()
  1980.       p1.command:=20
  1981.       p1.data:=0
  1982.       putWaitMsg(p1)
  1983. ELSE
  1984. FOR x:=1 TO line
  1985. Fgets(confighandle,str,ALL)
  1986. ENDFOR
  1987.  
  1988. len:=StrLen(str)
  1989. StrCopy(str,str,len-1)
  1990. ENDIF
  1991.  
  1992. Close(confighandle)
  1993.  
  1994. ENDPROC str
  1995.  
  1996.